home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 5.9 KB | 186 lines |
- 1 '**********************************************
- 2 '** TRAX **
- 3 '** **
- 4 '** VERSION 1.1 JULY 7, 1982 **
- 5 '**********************************************
- 10 KEY OFF : CLS : SCREEN 2
- 20 RANDOMIZE : CLS : SCREEN 1
- 30 GOSUB 1000 ' SCAN AND PRINT THE LETTERS `TRAX' IN 8X8 FORMAT
- 40 GOSUB 2000 ' DRAW A BOX AROUND THE SCREEN
- 50 GOSUB 3000 ' DRAW THE `TRAX' FACE
- 60 GOSUB 4000 ' DRAW THE PLAYING FIELD
- 70 GOSUB 5000 ' PRINT THE LABLES FOR THE SCREEN
- 80 GOTO 6000 ' PLAY THE GAME
- 90 '
- 1000 '**********************************************
- 1010 '** THIS SECTION SCANS FOR THE PATTERN FOR **
- 1020 '** THE LETTERS OF `TRAX' **
- 1030 '**********************************************
- 1040 A$ = "TRAX"
- 1050 B$ = ""
- 1060 FOR S = 1 TO 4 : B$ = B$ + MID$(A$,S,1) : NEXT
- 1070 A$ = B$
- 1080 FOR S = LEN(A$) + 1 TO 4
- 1090 A$ = A$ + " "
- 1100 NEXT
- 1110 DEF SEG = &HF000 ' LAST 64K OF MEMORY MAP
- 1120 TABLE = &HFA6E ' LOCATION OF FIRST CHARACTER
- 1130 X = 2 : Y = 5 : LOCATE X,Y
- 1140 FOR CHARACTER = 1 TO 4 ' FOR EACH CHARACTER
- 1150 A = ASC(MID$(A$,CHARACTER,1)) ' GET THE ASCII VALUE
- 1160 CODE = TABLE + A * 8 ' POINT INTO THE TABLE
- 1170 FOR BYTE = 0 TO 7 ' FOR EACH BYTE
- 1180 PATTERN = PEEK (CODE + BYTE)
- 1190 LOCATE X,Y
- 1200 IF PATTERN < 128 THEN PRINT " ";:GOTO 1230
- 1210 PRINT CHR$(A);
- 1220 PATTERN = PATTERN - 128
- 1230 IF PATTERN < 64 THEN PRINT " ";:GOTO 1260
- 1240 PRINT CHR$(A);
- 1250 PATTERN = PATTERN - 64
- 1260 IF PATTERN < 32 THEN PRINT " ";:GOTO 1290
- 1270 PRINT CHR$(A);
- 1280 PATTERN = PATTERN - 32
- 1290 IF PATTERN < 16 THEN PRINT " ";:GOTO 1320
- 1300 PRINT CHR$(A);
- 1310 PATTERN = PATTERN - 16
- 1320 IF PATTERN < 8 THEN PRINT " ";:GOTO 1350
- 1330 PRINT CHR$(A);
- 1340 PATTERN = PATTERN - 8
- 1350 IF PATTERN < 4 THEN PRINT " ";:GOTO 1380
- 1360 PRINT CHR$(A);
- 1370 PATTERN = PATTERN - 4
- 1380 IF PATTERN < 2 THEN PRINT " ";:GOTO 1410
- 1390 PRINT CHR$(A);
- 1400 PATTERN = PATTERN - 2
- 1410 IF PATTERN < 1 THEN PRINT " ";:GOTO 1430
- 1420 PRINT CHR$(A);
- 1430 PATTERN = PATTERN - 1
- 1440 X = X + 1
- 1450 NEXT BYTE
- 1460 X = X - 8 : Y = Y + 8 : IF Y > 35 THEN X = X + 8 : Y = 1
- 1470 NEXT CHARACTER
- 1480 RETURN
- 2000 '**********************************************
- 2010 '** THIS SECTION DRAWS A BOX AROUND THE **
- 2020 '** SCREEN **
- 2030 '**********************************************
- 2040 LINE (0,0)-(319,0)
- 2050 LINE -(319,199)
- 2060 LINE -(0,199)
- 2070 LINE -(0,0)
- 2080 RETURN
- 3000 '**********************************************
- 3010 '** THIS SECTION DRAWS THE TRAX MONSTER **
- 3020 '**********************************************
- 3030 A1$ = " \~~~~~/ " : LOCATE 12,4 : PRINT A1$;
- 3040 A2$ = " \ / " : LOCATE 13,4 : PRINT A2$;
- 3050 A3$ = " _\_/_ " : LOCATE 14,4 : PRINT A3$;
- 3060 A4$ = " / \ " : LOCATE 15,4 : PRINT A4$;
- 3070 A5$ = "= [] [] =" : LOCATE 16,4 : PRINT A5$;
- 3080 A6$ = "= * =" : LOCATE 17,4 : PRINT A6$;
- 3090 A7$ = "= ***** =" : LOCATE 18,4 : PRINT A7$;
- 3100 A8$ = "= ***** =" : LOCATE 19,4 : PRINT A8$;
- 3110 A9$ = " \_____/ " : LOCATE 20,4 : PRINT A9$;
- 3120 RETURN
- 4000 '**********************************************
- 4010 '** THIS SECTION DRAWS THE PLAYING FIELD **
- 4020 '**********************************************
- 4030 A10$ = "XXXXXXXXXX"
- 4040 LOCATE 11,30 : PRINT A10$;
- 4050 LOCATE 12,30 : PRINT A10$;
- 4060 LOCATE 13,30 : PRINT A10$;
- 4070 LOCATE 14,30 : PRINT A10$;
- 4080 LOCATE 15,30 : PRINT A10$;
- 4090 LOCATE 16,30 : PRINT A10$;
- 4100 LOCATE 17,30 : PRINT A10$;
- 4110 LOCATE 18,30 : PRINT A10$;
- 4120 LOCATE 19,30 : PRINT A10$;
- 4130 LOCATE 20,30 : PRINT A10$;
- 4140 LOCATE 22,30 : PRINT "0123456789";
- 4150 FOR X = 0 TO 9 : LOCATE X+11,28 : PRINT CHR$(X+48) : NEXT
- 4160 RETURN
- 5000 '**********************************************
- 5010 '** THIS SECTION PRINTS THE LABLES **
- 5020 '**********************************************
- 5030 LOCATE 12,15 : PRINT "#1 =";
- 5040 LOCATE 14,15 : PRINT "#2 =";
- 5050 LOCATE 16,15 : PRINT "#3 =";
- 5060 LOCATE 18,15 : PRINT "#4 =";
- 5070 LOCATE 20,15 : PRINT "#5 =";
- 5080 RETURN
- 6000 '**********************************************
- 6010 '** THIS SECTION PLAYS THE GAME **
- 6020 '**********************************************
- 6030 FOR A = 1 TO 15
- 6040 B = RND * 9 + 1
- 6050 C = RND * 9 + 1
- 6060 LOCATE 10+B,29+C : PRINT CHR$(2);
- 6070 A5$ = "= -- -- =" : LOCATE 16,4 : PRINT A5$;
- 6080 FOR X = 1 TO 100 : NEXT X
- 6090 LOCATE 10+B,29+C : PRINT CHR$(88);
- 6100 A5$ = "= [] [] =" : LOCATE 16,4 : PRINT A5$;
- 6110 FOR X = 1 TO 100 : NEXT X
- 6120 NEXT A
- 6130 A7$ = "= =" : LOCATE 18,4 : PRINT A7$;
- 6140 A8$ = "= ***** =" : LOCATE 19,4 : PRINT A8$;
- 6150 LOCATE 24,5 : PRINT "ENTER YOUR SHOT (";CHR$(25);",";CHR$(16);")";
- 6160 FOR X = 1 TO 10 : A(X) = INT (RND * 9 + 1) : NEXT
- 6170 FOR X = 1 TO 5 : FOUND(X) = 1 : NEXT
- 6180 ROW = 24 : COLUMN = 29 : LENGTH = 3
- 6190 GOSUB 7000
- 6200 IF LEN(B$) <> 3 THEN GOTO 6190
- 6210 IF (ASC(MID$(B$,1,1)) < 48) OR (ASC(MID$(B$,1,1)) > 57) THEN GOTO 6190
- 6220 IF (ASC(MID$(B$,3,1)) < 48) OR (ASC(MID$(B$,3,1)) > 57) THEN GOTO 6190
- 6230 IF (ASC(MID$(B$,2,1)) <> 44) THEN GOTO 6190
- 6240 XPOS = ASC(MID$(B$,1,1))-48
- 6250 YPOS = ASC(MID$(B$,3,1))-48 : LOCATE 22,7 : PRINT "LAST GUESS = " ;B$;
- 6260 FOR X = 1 TO 5
- 6270 IF FOUND (X) = 0 THEN 6360
- 6280 DISTANCE = SQR ( (XPOS-A(X))^2 + (YPOS-A(X+5))^2 )
- 6290 IF DISTANCE <> 0 THEN 6340
- 6300 FOUND(X) = 0
- 6310 LOCATE 10+2*X,20 : PRINT "FOUND";
- 6320 LOCATE 11+XPOS,30+YPOS : PRINT CHR$(1); : X = 5
- 6330 GOTO 6360
- 6340 LOCATE 10+2*X,20 : PRINT USING "##.##";DISTANCE
- 6350 LOCATE 11+XPOS,30+YPOS : PRINT "*";
- 6360 NEXT X
- 6370 FOUND = 0
- 6380 FOR X = 1 TO 5 : FOUND = FOUND + FOUND(X) : NEXT
- 6390 IF FOUND <> 0 THEN 6180
- 6400 FOR X = 1 TO 10 : FOR Y = 1 TO 10
- 6410 LOCATE X+10,Y+29 : PRINT " ";
- 6420 FOR Z = 1 TO 50 : NEXT Z
- 6430 NEXT Y : NEXT X
- 6440 LOCATE 24,5 : PRINT "ANOTHER GAME (Y/N) ? ";
- 6450 ROW = 24 : COLUMN = 26 : LENGTH = 1
- 6460 GOSUB 7000
- 6470 IF B$ = "Y" OR B$ ="y" THEN GOTO 50 ELSE CLS : END
- 7000 '**********************************************
- 7010 '** THIS SECTION GETS THE INPUT COORDINATES **
- 7020 '**********************************************
- 7030 B$ = ""
- 7040 FOR X = 1 TO LENGTH
- 7050 B$ = B$ + "-"
- 7060 NEXT X
- 7070 LOCATE ROW,COLUMN
- 7080 PRINT B$;
- 7090 POINTER = 1 : A$ = " "
- 7100 WHILE (ASC(A$) <> 13)
- 7110 A$ = INPUT$(1)
- 7120 IF (POINTER > LENGTH) AND (ASC(A$) = 13) THEN 7240
- 7130 IF (POINTER > LENGTH) AND (ASC(A$) = 8) THEN 7190
- 7140 IF (POINTER > LENGTH) THEN 7240
- 7150 IF (ASC(A$) >= 32) THEN MID$(B$,POINTER,1) = A$ : POINTER = POINTER + 1 : GOTO 7220
- 7160 IF (POINTER = 1) AND (ASC(A$) = 8) GOTO 7220
- 7170 IF (ASC(A$) <> 8) THEN 7210
- 7180 MID$(B$,POINTER,1) = "-"
- 7190 MID$(B$,POINTER-1,1) = "-"
- 7200 POINTER = POINTER -1
- 7210 IF (ASC(A$) = 13) THEN B$ = MID$(B$,1,POINTER-1) : POINTER = LENGTH + 1
- 7220 LOCATE ROW,COLUMN
- 7230 PRINT B$;
- 7240 WEND
- 7250 RETURN
-